package utilitario;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class CNumeros {

    String numeroEnTexto = "";

    public String formatearDecimales(int numeroDecimales, Double numero) {
        DecimalFormatSymbols simbolos = new DecimalFormatSymbols();
        DecimalFormat nf;
        simbolos.setDecimalSeparator('.');
        nf = new DecimalFormat("##########.##", simbolos);
        nf.setMaximumFractionDigits(numeroDecimales);
        nf.setMinimumFractionDigits(numeroDecimales);
        String numeroFormateado = nf.format(numero);
        return numeroFormateado;
    }

    public String convierteNumerosALetras(double valor, String moneda, String centimo) {
        String dectext;
        numeroEnTexto = "";
        int decimales;
        int unidades;
        int cientos;
        int miles;
        int millones;
        valor = Double.valueOf(this.formatearDecimales(2, valor));
        decimales = (int) (valor);
        decimales = (int) Math.rint((valor - (((double) decimales) - 0.001)) * 100);
        millones = (int) (valor / 1000000);
        valor = valor - millones * 1000000;
        miles = (int) (valor / 1000);
        valor = valor - miles * 1000;
        cientos = (int) (valor / 100);
        valor = valor - cientos * 100;
        unidades = (int) valor;
        if (millones > 0) {
            this.convierteMillonesALetras(millones);
        }
        if (miles > 0) {
            this.convierteMilesALetras(miles);
        }
        if (cientos > 0) {
            this.convierteCientosALetras(cientos, unidades);
        }
        if (unidades > 0) {
            this.convierteUnidadesALetras(unidades);
        }
        if (millones == 0 && miles == 0 && cientos == 0 && unidades == 1) {
            numeroEnTexto = numeroEnTexto + " " + moneda;
        } else {
            numeroEnTexto = numeroEnTexto + " " + moneda + "ES";
        }
        dectext = String.valueOf(decimales);
        dectext += "/100";
        numeroEnTexto = numeroEnTexto + " " + dectext;
        if (decimales == 1) {
            numeroEnTexto = numeroEnTexto + " " + centimo;
        } else {
            numeroEnTexto = numeroEnTexto + " " + centimo + "S";
        }
        return numeroEnTexto;
    }

    private void convierteMillonesALetras(int numero) {
        int unidades, cientos, miles;
        miles = numero / 1000;
        numero = numero - miles * 1000;
        cientos = numero / 100;
        unidades = numero - cientos * 100;
        if (miles > 0) {
            this.convierteMilesALetras(miles);
        }
        if (cientos > 0) {
            this.convierteCientosALetras(cientos, unidades);
        }
        if (unidades > 0) {
            this.convierteUnidadesALetras(unidades);
        }
        numeroEnTexto += " MILLON";
        if (miles > 0 || cientos > 0 || unidades > 1) {
            numeroEnTexto += "ES ";
        }
    }

    private void convierteMilesALetras(int numero) {
        int unidades, cientos;
        cientos = numero / 100;
        unidades = numero - cientos * 100;
        if (cientos > 0) {
            this.convierteCientosALetras(cientos, unidades);
        }
        if (unidades > 0) {
            this.convierteUnidadesALetras(unidades);
        }
        numeroEnTexto += " MIL ";
    }

    private void convierteCientosALetras(int numero, int unidades) {
        String[] centena = new String[]{"CIENTO ", "DOSCIENTOS ", "TRESCIENTOS ", "CUATROCIENTOS ", "QUINIENTOS ", "SEISCIENTOS ", "SETECIENTOS ", "OCHOCIENTOS ", "NOVECIENTOS "};
        if (numero == 1 && unidades == 0) {
            numeroEnTexto += "CIEN";
        } else {
            numeroEnTexto += centena[numero - 1];
        }
    }

    private void convierteUnidadesALetras(int numero) {
        int numero2;
        int numero3;
        String[] unidad = new String[]{"UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE"};
        String[] decena = new String[]{"VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA"};
        if (numero < 20) {
            numeroEnTexto = numeroEnTexto + " " + unidad[numero - 1];
        } else {
            if (numero == 20) {
                numeroEnTexto += "VEINTE";
            } else {
                if (numero < 30) {
                    numeroEnTexto += "VEINTI";
                    numero2 = numero - 20;
                    numeroEnTexto += unidad[numero2 - 1];
                } else {
                    numero3 = numero / 10;
                    numero2 = (numero - numero3 * 10);
                    numeroEnTexto += decena[numero / 10 - 2];
                    if (numero2 > 0) {
                        numeroEnTexto = numeroEnTexto + " Y " + unidad[numero2-1];
                    }
                }
            }
        }
    }
}